package controlador;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Vector;

import vista.vOrdenCompra;

import modelo.mDetalleOrden;
import modelo.mOrdenCompra;
import modelo.mOrdenCompraDao;
import modelo.mReceta;
import modelo.mCategoria;
import modelo.mCategoriaDao;
import modelo.mProducto;
import modelo.mProductoDao;
import modelo.mDetalleOrdenDao;
import modelo.mIngredienteDao;
import modelo.mRecetaDao;

public class cOrdenCompra implements ActionListener {

	double acumulador=0;
	vOrdenCompra orden=new vOrdenCompra();
	mProductoDao productodao=new mProductoDao();
	mCategoriaDao categoriadao=new mCategoriaDao();
	mOrdenCompraDao  ordencompradao=new mOrdenCompraDao();
	public cOrdenCompra() {
		super();
		// TODO Auto-generated constructor stub
		this.orden = new vOrdenCompra();
		this.orden.setLocation(300,150);
		this.orden.setVisible(true);	
		this.orden.addListener(this);
		orden.CargarComboCategoria(categoriadao.CargarCombo());
		orden.CargarComboProducto(productodao.CargarCombo(categoriadao.getCategoria(orden.getcategoria()).getCodigo()));
	    orden.setNumeroorden(ordencompradao.getUltimoCodigo());	
	}
	private void Incluir()
	{
		mCategoria categoria=new mCategoria();
		mProducto producto=new mProducto();
		producto=productodao.getProductoN(orden.getproducto());
		//orden.Mensaje(producto.getCodigopro());
		categoria =categoriadao.getCategoria(orden.getcategoria());
		acumulador=acumulador+Double.parseDouble(orden.getcantidad())*producto.getPrecio();
		orden.setTotal(acumulador);
		orden.getmodelo().incluir(producto.getCodigopro(), categoria.getNombre(), producto.getNombrepro(),orden.getcantidad() , String.valueOf(producto.getPrecio()), String.valueOf(producto.getPrecio()*Double.parseDouble(orden.getcantidad())));
        
	}
	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		if(e.getSource()==orden.getcombo())
		orden.CargarComboProducto(productodao.CargarCombo(categoriadao.getCategoria(orden.getcategoria()).getCodigo()));
	
		
	if(e.getActionCommand().equals("Salir"))
		orden.dispose();
	else if(e.getActionCommand().equals("Cancelar"))
	{
	orden.Limpiar();
	orden.getmodelo().Limpiar();
	}else if(e.getActionCommand().equals("Guardar"))
	{
		RegistrarOrdenCompra();
	}else if(e.getActionCommand().equals("Incluir"))
	{
		if(orden.getcantidad().equals(""))
			orden.Mensaje("Tiene que Insertar un valor en la Cantidad"); 
		else
		{
	    boolean encontrado=ValidarProducto(productodao.getProductoN(orden.getproducto()));
	    if (!encontrado)
		Incluir();
	    else
	    	orden.Mensaje("El producto ya Existe");
	    orden.setcantidad("");
		}
	}else if(e.getActionCommand().equals("Remover"))
	{
		acumulador=acumulador-Double.parseDouble(String.valueOf(orden.getmodelo().getValueAt(orden.Posicion(), 5)));
		orden.setTotal(acumulador);
		orden.getmodelo().Remover(orden.Posicion());
	}
	}
	 public boolean ValidarProducto(mProducto pro)
	    {
	    	boolean encontrado=false; 
			int i=orden.getmodelo().getRowCount();
			for(int j=0; j<i;j++)
			{
				String hola =String.valueOf(orden.getmodelo().getValueAt(j, 0));
				String chao =pro.getCodigopro();
				if(hola.equalsIgnoreCase(chao))
				{
					encontrado=true;
				}
			}
			return encontrado;
	    }
	private void RegistrarOrdenCompra()
	{
		try{
			if(orden.getcedula().equals("") || orden.getnombre().equals("")||orden.gettotal().equals(""))
	    		orden.Mensaje("Debe llenar todos los datos para poder registrar la Orden de Compra");
	    	else
	    	{
	    		mRecetaDao recetadao=new mRecetaDao();
	    		mIngredienteDao ingredientedao=new mIngredienteDao();
	    	    mDetalleOrdenDao detalleordencompradao=new mDetalleOrdenDao();
	    	    
	    	    mOrdenCompra ordencompra= new mOrdenCompra(orden.getNumeroorden(), orden.getnombre(), orden.getcedula(),Double.parseDouble(orden.gettotal()));		    
		       
	    	    ordencompradao.RegistrarOrden(ordencompra);
		        
	    	    int i=orden.getmodelo().getRowCount();
		        Vector<mReceta> vreceta=new Vector<mReceta>();
		        for(int j=0; j<i;j++)
		        {
		        	mDetalleOrden detalleorden=new mDetalleOrden(productodao.getProductoC(String.valueOf(orden.getmodelo().getValueAt(j,0))),ordencompra,"D"+String.valueOf(orden.getNumeroorden()),Integer.parseInt(String.valueOf(orden.getmodelo().getValueAt(j,3))), Double.parseDouble(String.valueOf(orden.getmodelo().getValueAt(j,5))));
		        	vreceta=recetadao.getReceta(detalleorden.getProducto().getCodigopro());
		        	ingredientedao.ActualizarExistenciaMenos(vreceta, detalleorden.getCantidad());
		        	detalleordencompradao.RegistrarDetalleOrden(detalleorden);
		        }
		        orden.setNumeroorden(orden.getNumeroorden());
		        orden.Mensaje("La Orden de Compra fue registrado con exito");
		    	orden.Limpiar();
		    	orden.getmodelo().Limpiar();
	    	}
		}catch(Exception e)
		{
			orden.Mensaje("No se pudo registrar la Orden de Compra, verifique que los datos sean correctos");
			orden.Limpiar();

		}
	}
}
